home *** CD-ROM | disk | FTP | other *** search
- ; *** Syndicate HD loader v1.0
- ; *** Written by Jean-François Fabre
-
- include "syslibs.i"
- include "jst.i"
-
- HD_PARAMS "",0,0
-
- loader:
- move.l #$100000,D0
- JSRABS AllocExtMem
-
- Mac_printf "Syndicate HD Loader v1.0"
- Mac_printf "Coded by Jean-François Fabre © 2000"
-
-
- TESTFILE introfile
- tst.l D0
- bne FileErr
- TESTFILE mainfile
- tst.l D0
- bne FileErr
-
- JSRABS UseHarryOSEmu
-
- move.l #10000,D0
- JSRABS LoadSmallFiles
-
- moveq.l #0,D0
- move.l #CACRF_CopyBack,D1
- JSRABS Degrade
-
- GO_SUPERVISOR
- SAVE_OSDATA $100000
-
- move.w #0,SR
-
- lea introfile(pc),A0
- bsr LoadExecutable
- JSRGEN FlushCachesHard
- JSR (A1)
-
- JSRGEN BlackScreen
- move.l #-2,$100.W
- move.l #$100,$DFF080
- JSRGEN BlackScreen
-
- bsr UnloadExecutable
-
- lea mainfile(pc),A0
- bsr LoadExecutable
- STORE_REGS
-
- move.l A1,A3
-
- ; remove VBR shit
-
- move.l A3,A0
- move.l A3,A1
- add.l #$20000,A1
- move.l #$4E7A1801,D0
- move.l #$72004E71,D1
- JSRGEN HexReplaceLong
-
- ; install quit key
-
- move.l A3,A0
- move.l A3,A1
- add.l #$20000,A1
-
- lea .quitkey(pc),A2
- move.l #10,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .skip
- PATCHUSRJSR (A0),KbInt
- .skip
- RESTORE_REGS
- JSRGEN FlushCachesHard
- JSR (A1)
- .loop
- JSRGEN InGameExit
- bra .loop
-
- .quitkey:
- dc.w $137C,0,$0C00,$137C,$0077
-
- KbInt:
- move.b #0,($C00,A1)
- STORE_REGS D0
- ror.b #1,D0
- not.b D0
- cmp.b #$5D,D0
- bne.b .noquit
- JSRGEN InGameExit
- .noquit
- RESTORE_REGS D0
- rts
- MemErr:
- Mac_printf "** Not enough memory to run Syndicate!"
- JMPABS CloseAll
-
-
- ; loads an executable by calling OSEmu LoadSeg()
- ;
- ; < A0: name of the executable
- ; > A1: start address (do a JSR (a1) to start the program)
- ; > A0: pointers on arguments
- ; > D0: argument string length
- ;
- ; ** no checks are done there so be careful **
-
- LoadExecutable:
- movem.l A2-A6/D1-D7,-(A7)
- move.l A0,-(A7)
- MOVE.L $4.W,A6 ;OPEN DOSLIB FOR USE (THE EMU
- MOVEQ.L #0,D0 ;PROVIDES THE FUNCTIONS)
- LEA dosname(PC),A1
- JSRLIB OpenLibrary
- RELOC_MOVEL D0,dosbase
- MOVE.L D0,A6
- move.l (A7)+,A0
-
- MOVE.L A0,D1
- JSRLIB LoadSeg
- RELOC_MOVEL D0,loaderseg
-
- LSL.L #2,D0
- MOVE.L D0,A1
- ADDQ.L #4,A1
-
- lea progargs(pc),A0
- move.l A0,D0
- JSRGEN StrlenAsm ; arguments length
-
- movem.l (A7)+,A2-A6/D1-D7
- rts
-
- ; unloads previously loaded executable
-
- UnloadExecutable:
- STORE_REGS
- move.l dosbase(pc),A6
- move.l loaderseg(pc),D1
- JSRLIB UnLoadSeg
- RESTORE_REGS
- rts
-
- FileErr:
- Mac_printf "** Cannot find file 'intro' and/or 'syn'"
- JMPABS CloseAll
-
- loaderseg:
- dc.l 0
- dosbase:
- dc.l 0
- progargs:
- ; your arguments here (ex: dc.b "/f data1")
- dc.b "\q",10,0 ; linefeed + null termination
- dosname:
- dc.b "dos.library",0
-
- mainfile:
- dc.b "syn",0
- introfile:
- dc.b "intro",0
-